package ar.com.osdepym.agregacionafip.activities;

import java.util.List;
import java.util.Vector;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import ar.com.osdepym.agregacionafip.activities.context.AppContext;
import ar.com.osdepym.agregacionafip.adapters.ABMListAdapter;
import ar.com.osdepym.agregacionafip.adapters.Contenedor;
import ar.com.osdepym.agregacionafip.adapters.ContenedorCheckbox;
import ar.com.osdepym.agregacionafip.configuracion.ConfiguracionAplicacion;
import ar.com.osdepym.agregacionafip.validadores.CuitValidador;
import ar.com.osdepym.agregacionafip.validadores.DummyValidator;
import ar.com.osdepym.agregacionafip.validadores.MailValidador;

public class ConfigOptionActivity extends Activity implements OnClickListener,
		OnItemClickListener {
	ListView listView;
	List<Contenedor> contenedor = new Vector<Contenedor>();

	
	private ConfiguracionAplicacion ca;
	private String tipoOpcion = "";
	private List<String> opciones = new Vector<String>();
	private ArrayAdapter<Contenedor> adapter;
	private AppContext app;

	@SuppressLint("SetJavaScriptEnabled")
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		init();

		onClickHandlers();
		cargarOpciones();
		fillListView();
	}

	private void init() {
		app = (AppContext) this.getApplicationContext();

		overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
		setContentView(R.layout.abm_list);
		TextView t = (TextView) findViewById(R.id.abm_list_title);
		this.ca = app.getConfiguracionAplicacion();
		this.tipoOpcion = app.getTipoOpcion();

		t.setText(tipoOpcion);
		EditText et = (EditText) findViewById(R.id.new_option);
		et.setInputType(app.getInputType());

	}

	private void fillListView() {
		listView = (ListView) findViewById(R.id.options);
		adapter = new ABMListAdapter(this, R.layout.abm_list_row, contenedor);

		((ABMListAdapter) adapter).setButtonHandler(this);

		View header = (View) getLayoutInflater().inflate(
				R.layout.listview_header, null);
		TextView t = (TextView) header.findViewById(R.id.listViewTitle);
		t.setText("Opciones seleccionadas");

		listView.addHeaderView(header);
		// Assign adapter to ListView
		listView.setAdapter(adapter);
		listView.setOnItemClickListener(this);
	}

	private void cargarOpciones() {
		contenedor = app.getOpciones();
		
		

	}

	private void onClickHandlers() {
		Button b = (Button) findViewById(R.id.add_item);
		b.setOnClickListener(this);

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.config_menu, menu);
		return true;
	}

	@Override
	public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
		if (arg0.getId() == R.id.delete_item)
			contenedor.remove(arg2 - 1);

	}

	@Override
	public void onClick(View v) {

		Button b = (Button) v;

		switch (b.getId()) {
		case R.id.delete_item:
			TextView text = (TextView) ((View) b.getParent())
					.findViewById(R.id.itemText);
			contenedor.remove(new Contenedor(text.getText().toString()));
			this.opciones.remove(text.getText().toString());
			adapter.notifyDataSetChanged();
			break;
		case R.id.add_item:
			InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
			imm.hideSoftInputFromWindow(getWindow().getCurrentFocus()
					.getWindowToken(), 0);

			EditText t = (EditText) findViewById(R.id.new_option);

			String mensaje = app.getValidador().isValid(t.getText().toString());
			if (mensaje != null) {
				Toast.makeText(this, mensaje, Toast.LENGTH_LONG).show();
			} else {

				if (contenedor.size() > 0
						&& contenedor.contains(new Contenedor(t.getText()
								.toString()))) {
					Toast.makeText(this, "El elemento ya existe",
							Toast.LENGTH_LONG).show();
				} else {
					try {
						Contenedor c = (Contenedor) this.app.getContenedorType().newInstance();
						c.setNombre(t.getText().toString());
						this.contenedor.add(c);
						t.setText("");
						adapter.notifyDataSetChanged();
					} catch (InstantiationException e) {
						e.printStackTrace();
					} catch (IllegalAccessException e) {
						e.printStackTrace();
					}
					

				}
			}
		}

	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {

		Intent intent = null;
		switch (item.getItemId()) {
		case R.id.Cuits_menu:
			app.setTipoOpcion("Cuits");
			app.getCuitsAgregados().clear();
			app.setContenedorType(ContenedorCheckbox.class);
			app.setOpciones(ca.getCuits());
			app.setValidador(new CuitValidador());
			app.setInputType(InputType.TYPE_CLASS_NUMBER);
			intent = new Intent(this, ConfigOptionActivity.class);
			startActivity(intent);

			break;

		case R.id.Dest_archivo_menu:
			app.setTipoOpcion("Destinatarios de Archivo");
			app.setContenedorType(Contenedor.class);
			app.setOpciones(ca.getDestinatariosArchivo());
			app.setValidador(new MailValidador());
			app.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
			intent = new Intent(this, ConfigOptionActivity.class);
			startActivity(intent);
			break;

		case R.id.Dest_exitos_menu:
			app.setTipoOpcion("Destinatarios Exito");
			app.setContenedorType(Contenedor.class);
			app.setOpciones(ca.getDestinatariosExito());
			app.setValidador(new MailValidador());
			app.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
			intent = new Intent(this, ConfigOptionActivity.class);
			startActivity(intent);
			break;

		case R.id.Dest_falla_menu:
			app.setTipoOpcion("Destinatario Fallas");
			app.setContenedorType(Contenedor.class);
			app.setOpciones(ca.getDestinatariosFalla());
			app.setValidador(new MailValidador());
			app.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
			intent = new Intent(this, ConfigOptionActivity.class);
			startActivity(intent);
			break;
			
		case R.id.Filtro_tipo_archivo:
			app.setTipoOpcion("Tipos de Archivo a Contemplar");
			app.setContenedorType(Contenedor.class);
			app.setOpciones(ca.getFiltrosTipoArchivo());
			app.setValidador(new DummyValidator());
			app.setInputType(InputType.TYPE_CLASS_TEXT);
			intent = new Intent(this, ConfigOptionActivity.class);
			startActivity(intent);
			break;	
			
		default:
			break;
		}
		return true;
	}

	@Override
	public void onBackPressed() {
		Intent intent = new Intent(this, ConfiguracionActivity.class);
		intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
				| Intent.FLAG_ACTIVITY_CLEAR_TOP);
		startActivity(intent);
	}

}
